﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using FacturacionII.Modelo;
namespace FacturacionII.Clases
{
    class clsPersonas
    {
        facturacionEntities objFactuacionEntidades;
        public clsPersonas() { }

        public ArrayList CargarDatosGridView()
        {
            ArrayList lista = new ArrayList();
            objFactuacionEntidades = new facturacionEntities();
            var query = from p in objFactuacionEntidades.personas
                        join d in objFactuacionEntidades.distrito on p.id_distrito equals d.id
                        join i in objFactuacionEntidades.identificacion on p.id_identificacion equals i.id
                        join g in objFactuacionEntidades.giro on p.id_giro equals g.id
                        orderby p.razon_social ascending
                        select new
                        {
                            ID = p.id,
                            RUC = p.ruc,
                            RAZON_SOCIAL = p.razon_social,
                            REPRESENTANTE = p.representante,
                            DNI = p.dni,
                            NOMBRES = p.nombres,
                            APELLIDOS = p.apellidos,
                            DIRECCION = p.direccion,
                            ID_DISTRITO = p.id_distrito,
                            DISTRITO = d.distrito1,
                            TELEFONOS = p.telefonos,
                            CELULAR = p.celulares,
                            EMAIL = p.email,
                            ID_IDENTIFICACION = p.id_identificacion,
                            IDENTIFICACION = i.descripcion,
                            ID_GIRO = p.id_giro,
                            GIRO = g.descripcion,
                            LIMITE_CREDITO = p.limite_credito,
                            REFERENCIAS = p.referencias
                        };

            foreach (var datos in query)
            {
                lista.Add(datos);
            }
            return lista;
        }

        public ArrayList BuscarDatosGridView(string razonSocial)
        {
            ArrayList lista = new ArrayList();
            objFactuacionEntidades = new facturacionEntities();
            var query = from p in objFactuacionEntidades.personas
                        join d in objFactuacionEntidades.distrito on p.id_distrito equals d.id
                        join i in objFactuacionEntidades.identificacion on p.id_identificacion equals i.id
                        join g in objFactuacionEntidades.giro on p.id_giro equals g.id
                        where p.razon_social.Contains(razonSocial)
                        select new
                        {
                            ID = p.id,
                            RUC = p.ruc,
                            RAZON_SOCIAL = p.razon_social,
                            REPRESENTANTE = p.representante,
                            DNI = p.dni,
                            NOMBRES = p.nombres,
                            APELLIDOS = p.apellidos,
                            DIRECCION = p.direccion,
                            ID_DISTRITO = p.id_distrito,
                            DISTRITO = d.distrito1,
                            TELEFONOS = p.telefonos,
                            CELULAR = p.celulares,
                            EMAIL = p.email,
                            ID_IDENTIFICACION = p.id_identificacion,
                            IDENTIFICACION = i.descripcion,
                            ID_GIRO = p.id_giro,
                            GIRO = g.descripcion,
                            LIMITE_CREDITO = p.limite_credito,
                            REFERENCIAS = p.referencias
                        };

            foreach (var datos in query)
            {
                lista.Add(datos);
            }
            return lista;
        }

        public void Guardar(string ruc, string razonSocial, string representante, string dni,
            string nombres, string apellidos, string direccion, int codigoDistrito, string telefono,
            string celular, string email, int identificacion, int giro, decimal limiteCredito,
            string referencias, int usuario)
        {
            
            objFactuacionEntidades = new facturacionEntities();
            personas persona = new personas
            {
                ruc = ruc,
                razon_social = razonSocial,
                representante = representante,
                dni = dni,
                nombres = nombres,
                apellidos = apellidos,
                direccion = direccion,
                id_distrito = codigoDistrito,
                telefonos = telefono,
                celulares = celular,
                email = email,
                id_identificacion = identificacion,
                id_giro = giro,
                limite_credito = limiteCredito,
                referencias = referencias,
                id_usuario = usuario,
                fecha_registro = DateTime.Now
            };

            objFactuacionEntidades.AddTopersonas(persona);
            objFactuacionEntidades.SaveChanges();
        }

        public void GuardarCambios(int id, string ruc, string razonSocial, string representante, string dni,
            string nombres, string apellidos, string direccion, int codigoDistrito, string telefono,
            string celular, string email, int identificacion, int giro, decimal limiteCredito,
            string referencias, int usuario)
        {
            objFactuacionEntidades = new facturacionEntities();
            personas persona = objFactuacionEntidades.personas.FirstOrDefault(
                a => a.id == id);
            persona.ruc = ruc;
            persona.razon_social = razonSocial;
            persona.representante = referencias;
            persona.dni = dni;
            persona.nombres = nombres;
            persona.apellidos = apellidos;
            persona.direccion = direccion;
            persona.id_distrito = codigoDistrito;
            persona.telefonos = telefono;
            persona.celulares = celular;
            persona.email = email;
            persona.id_identificacion = identificacion;
            persona.id_giro = giro;
            persona.limite_credito = limiteCredito;
            persona.referencias = referencias;
            objFactuacionEntidades.SaveChanges();
        }

        public void Eliminar(int id)
        {
            objFactuacionEntidades = new facturacionEntities();
            personas persona = objFactuacionEntidades.personas.FirstOrDefault(
                a => a.id == id);
            objFactuacionEntidades.DeleteObject(persona);
            objFactuacionEntidades.SaveChanges();
        }

        public ArrayList CargarComboBoxPersonas()
        {
            objFactuacionEntidades = new facturacionEntities();
            ArrayList lista = new ArrayList();
            var departamentos = from p in objFactuacionEntidades.personas
                                orderby p.apellidos
                                select new { CODIGO = p.id, NOMBRES = p.apellidos + " " + p.nombres };
            foreach (var datos in departamentos)
            {
                lista.Add(datos);
            }

            return lista;
        }
    }
}
